package com.zh.login.controller;

import cn.hutool.core.date.DateUtil;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @Description: 日期定制工具类
 * @ClassName CustomMadeDateUtil
 * @date: 2020.12.22 11:30
 * @Author: zhanghang
 */
public class CustomMadeDateUtil {
    // 日期格式
    public static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    public static SimpleDateFormat dateFormatPrecise = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    /**
     * description: 获取系统的开始时间2020-02-02 10：00：00
     * date: 2020年-12月-26日 10:56
     * author: zhanghang
     * 
     * @param 
     * @return java.util.Date
     */ 
    public static Date getSystemStartTime(){
        String startDateStr = "2020-02-02 10:00:00";
        return DateUtil.parse(startDateStr);
    }

    /**
     * description: 获取当前时间的多少天
     * date: 2021年-01月-20日 9:36
     * author: zhanghang
     * 
     * @param 
     * @return java.lang.String
     */ 
    public static String getNow(int day){
        Calendar now = Calendar.getInstance();
        now.add(Calendar.DAY_OF_MONTH, day);
        String endDate = dateFormat.format(now.getTime());
        System.out.println(endDate);
        return endDate;
    }
    
    /**
     * description: 字符串转日期
     * date: 2021年-01月-20日 9:40
     * author: zhanghang
     * 
     * @param dataStr
     * @return java.util.Date
     */ 
    public static Date format(String dataStr){
        try {
            return dateFormat.parse(dataStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * description: 字符串转时间
     * date: 2021年-01月-20日 9:40
     * author: zhanghang
     *
     * @param dataStr
     * @return java.util.Date
     */
    public static Date formatPrecise(String dataStr){
        try {
            return dateFormatPrecise.parse(dataStr);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * description: 获取昨天的日期 格式为 yyyy-MM-dd
     * date: 2021年-01月-19日 15:11
     * author: zhanghang
     * 
     * @param 
     * @return java.util.Date
     */ 
    public static Date getYesterday(){
        Date yesterday = DateUtil.yesterday();
        String formatDate = DateUtil.formatDate(yesterday);
        return  DateUtil.parse(formatDate);
    }

    /**
     * description: 获取昨天的日期 格式为 yyyy-MM-dd 字符串
     * date: 2021年-01月-19日 15:11
     * author: zhanghang
     *
     * @param
     * @return java.util.Date
     */
    public static String getYesterdayStr(){
        Date yesterday = DateUtil.yesterday();
        String formatDate = DateUtil.formatDate(yesterday);
        return  formatDate;
    }






    /**
     * description: 本月初时间 ，获得本月第一天0点时间
     * date: 2020年-12月-22日 13:44
     * author: zhanghang
     *
     * @param
     * @return java.util.Date
     */
    public static Date getTimesMonthmorning() {
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.DAY_OF_MONTH));
        return cal.getTime();
    }

    /**
     * description: 本月未24点时间 ，获得本月最后一天24点时间
     * date: 2020年-12月-22日 13:44
     * author: zhanghang
     *
     * @param
     * @return java.util.Date
     */
    public static Date getTimesMonthnight() {
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));
        cal.set(Calendar.HOUR_OF_DAY, 24);
        return cal.getTime();
    }

    /**
     * description: 下月初时间
     * date: 2020年-12月-22日 13:44
     * author: zhanghang
     *
     * @param
     * @return java.util.Date
     */
    public static String getNextMonthStartDate() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getTimesMonthmorning());
        cal.add(Calendar.MONTH, 1);
        return DateUtil.formatDate(cal.getTime());
    }

    /**
     * description: 获取当前时间的下月未时间
     * date: 2020年-12月-22日 13:44
     * author: zhanghang
     *
     * @param
     * @return java.lang.String 返回时间字符串 yyyy-MM-dd
     */
    public static String getNextMonthEndDate() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        calendar.add(Calendar.MONTH, 2);
        calendar.set(Calendar.DATE, 0);
        return DateUtil.formatDate(calendar.getTime());
    }

    /**
     * description: 本年开始点时间
     * date: 2020年-12月-22日 13:43
     * author: zhanghang
     *
     * @param
     * @return java.util.Date
     */
    public static Date getCurrentYearStartTime() {
        Calendar cal = Calendar.getInstance();
        cal.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONDAY), cal.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
        cal.set(Calendar.DAY_OF_MONTH, cal.getActualMinimum(Calendar.YEAR));
        return cal.getTime();
    }

    /**
     * description: 本年结束点时间
     * date: 2020年-12月-22日 13:43
     * author: zhanghang
     *
     * @param
     * @return java.util.Date
     */
    public static Date getCurrentYearEndTime() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getCurrentYearStartTime());
        cal.add(Calendar.YEAR, 1);
        return cal.getTime();
    }

    /**
     * description: 上年开始点时间
     * date: 2020年-12月-22日 13:43
     * author: zhanghang
     *
     * @param
     * @return java.util.Date
     */
    public static Date getLastYearStartTime() {
        Calendar cal = Calendar.getInstance();
        cal.setTime(getCurrentYearStartTime());
        cal.add(Calendar.YEAR, -1);
        return cal.getTime();
    }
}
